//
// Created by jinling on 2025/6/24.
//

#pragma  once

#include <unordered_set>
#include <mutex>
#include <thread>

#include "Task.h"
#include "Singleton.h"
#include "TTime.h"

namespace tmms
{
    namespace base
    {
        class TaskMgr : public NonCopyable
        {
        public:
            TaskMgr() =default;

            void OnWork();
            bool Add(TaskPtr &task);
            bool Del(TaskPtr &task);
        private:
            std::unordered_set<TaskPtr> tasks_;
            std::mutex lock_;
        };
        #define sTaskMgr tmms::base::Singleton<tmms::base::TaskMgr>::Instance()
    }

}




// // 使用功能：
// using namespace tmms::base;
// void TestTask()
// {
//     TaskPtr task1 = std::make_shared<Task>([](const TaskPtr &task)
//                                            {
//                                                std::cout << "task1 interval:" << 1000 << std::endl;
//                                            },
//                                            1000);
//
//
//     TaskPtr task2 = std::make_shared<Task>([](const TaskPtr &task)
//                                            {
//                                                std::cout << "task2 interval:" << 1000 << std::endl;
//                                                 task->Restart();
//                                            },
//                                            1000);
//
//     TaskPtr task3 = std::make_shared<Task>([](const TaskPtr &task)
//                                            {
//                                                std::cout << "task3 interval:" << 1000 << std::endl;
//                                            },
//                                            500);
//
//     TaskPtr task4 = std::make_shared<Task>([](const TaskPtr &task)
//                                            {
//                                                 std::cout << "task4 interval:" << 1000 << std::endl;
//                                            },30000);
//
//     sTaskMgr->Add(task1);//添加任务；
//     sTaskMgr->Add(task2);//添加任务；
//     sTaskMgr->Add(task3);//添加任务；
//     sTaskMgr->Add(task4);//添加任务；
// }
//
// int main(int argc,const char * argu)
// {
//     TestTask();
//     while (1)
//     {
//         sTaskMgr->OnWork();
//         std::this_thread::sleep_for(500);
//     }
// }